Programmable non-volatile memory such as flash memory and electronically erasable programmable read only memory (EEPROM) is used in many types of computer systems. For example, programmable non-volatile memory is used in computer systems where space is a premium (e.g., mobile phones, PDAs, digital cameras) and in computer systems where high-reliability is critical (e.g., communications network equipment). A common use of programmable non-volatile memory is to store a boot program for a processor. Programmable non-volatile memory can also be used to store data such as picture files (e.g., in a digital camera flash memory card).
FIG. 1 depicts a block diagram of a computer system that utilizes an operating system 100 and a flash translation layer 102 at the software level 104 and a flash memory device 106 at the hardware level 108. In operation, the operating system includes a file system 110 that identifies addresses for reading and writing to and from the flash memory device. The addresses generated by the operating system, referred to herein as logical addresses, are translated to physical addresses by the flash translation layer. At the hardware level, the physical addresses are referred to as external addresses. Flash translation layer software is described in more detail in the document “Understanding the Flash Translation Layer (FTL) Specification,” Application Note AP-684 from INTEL Corporation, December 1998. The flash translation layer can also perform functions such as wear leveling and bad block management. Because the flash translation layer is an entirely software-based element, when the operating system and flash translation layer are not up and running, no translation between logical and physical addresses can be accomplished. Note that flash memory devices are used in many applications without a flash translation layer.
Whether or not a flash translation layer 102 exists, at the hardware level 108, the flash memory device 106 converts an external memory address received on an address bus into an internal address. FIG. 2 depicts a block diagram of a flash memory device 106 that includes an address decoder 112 and programmable non-volatile memory 114 that is logically divided into blocks 116 (e.g., blocks 0, 1, 2, 3 . . . , N). The address decoder includes fixed hardware logic that converts external addresses to internal addresses according to a fixed algorithm. In operation, the address decoder depicted in FIG. 2 receives external addresses from the address bus 118 as part of read and write operations and decodes the external addresses into internal addresses that identify memory blocks within the flash memory device. The relationship between the external addresses and the internal addresses is pre-established and is not changeable. FIG. 3 graphically depicts an example of the fixed relationship between address ranges in the external address space and the memory blocks 116 of the flash memory device 106. As depicted in FIG. 3, the address space 0x0000-0x0ffff corresponds to memory block 0, the address space 0x1000-0x1ffff corresponds to memory block 1, the address space 0x2000-0x2ffff corresponds to memory block 2, the address space 0x3000-0x3ffff corresponds to memory block 3, and the address space 0xN000-0xNffff corresponds to memory block N.
As described above, the flash translation layer 102 is a software-based element that provides address translation between an operating system 100 and a flash memory device 106. While the flash translation layer works well to provide software-level address translation between an operating system and a flash memory device, the flash translation layer is relatively complex software that consumes valuable resources (RAM memory space, processing cycles) in a computer system. Additionally, the functionality provided by the flash translation layer is dependent on software being up and running. In view of this, what is needed is a technique for performing read and write operations within a programmable non-volatile memory device that provides flexibility and that is not dependent on complex flash translation layer software.